home *** CD-ROM | disk | FTP | other *** search
/ Risc World 5 / Risc World 5.iso / SOFTWARE / Issue5 / PD / DIRSYNC / LegalStuff / gnudiff / normal.c < prev    next >
C/C++ Source or Header  |  2001-11-24  |  2KB  |  72 lines

  1. /* Normal-format output routines for GNU DIFF.
  2.  
  3.    Copyright (C) 1988, 1989, 1993, 1995, 1998, 2001 Free Software
  4.    Foundation, Inc.
  5.  
  6.    This file is part of GNU DIFF.
  7.  
  8.    GNU DIFF is free software; you can redistribute it and/or modify
  9.    it under the terms of the GNU General Public License as published by
  10.    the Free Software Foundation; either version 2, or (at your option)
  11.    any later version.
  12.  
  13.    GNU DIFF is distributed in the hope that it will be useful,
  14.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.    GNU General Public License for more details.
  17.  
  18.    You should have received a copy of the GNU General Public License
  19.    along with this program; see the file COPYING.
  20.    If not, write to the Free Software Foundation,
  21.    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
  22.  
  23. #include "diff.h"
  24.  
  25. static void print_normal_hunk (struct change *);
  26.  
  27. /* Print the edit-script SCRIPT as a normal diff.
  28.    INF points to an array of descriptions of the two files.  */
  29.  
  30. void
  31. print_normal_script (struct change *script)
  32. {
  33.   print_script (script, find_change, print_normal_hunk);
  34. }
  35.  
  36. /* Print a hunk of a normal diff.
  37.    This is a contiguous portion of a complete edit script,
  38.    describing changes in consecutive lines.  */
  39.  
  40. static void
  41. print_normal_hunk (struct change *hunk)
  42. {
  43.   lin first0, last0, first1, last1;
  44.   register lin i;
  45.  
  46.   /* Determine range of line numbers involved in each file.  */
  47.   enum changes changes = analyze_hunk (hunk, &first0, &last0, &first1, &last1);
  48.   if (!changes)
  49.     return;
  50.  
  51.   begin_output ();
  52.  
  53.   /* Print out the line number header for this hunk */
  54.   print_number_range (',', &files[0], first0, last0);
  55.   fprintf (outfile, "%c", change_letter[changes]);
  56.   print_number_range (',', &files[1], first1, last1);
  57.   fprintf (outfile, "\n");
  58.  
  59.   /* Print the lines that the first file has.  */
  60.   if (changes & OLD)
  61.     for (i = first0; i <= last0; i++)
  62.       print_1_line ("<", &files[0].linbuf[i]);
  63.  
  64.   if (changes == CHANGED)
  65.     fprintf (outfile, "---\n");
  66.  
  67.   /* Print the lines that the second file has.  */
  68.   if (changes & NEW)
  69.     for (i = first1; i <= last1; i++)
  70.       print_1_line (">", &files[1].linbuf[i]);
  71. }
  72.